#!/bin/bash

# 下载mp4v2源码的脚本

# 设置下载目录
DOWNLOAD_DIR="$(pwd)/mp4v2_source"

# 创建下载目录
mkdir -p $DOWNLOAD_DIR || {
    echo "创建下载目录失败！请检查权限。"
    exit 1
}
cd $DOWNLOAD_DIR

# 标记是否成功下载
DOWNLOAD_SUCCESS=0

# 下载mp4v2源码
# 从GitHub上下载最新的mp4v2源码
echo "正在下载mp4v2源码..."

# 先清理可能存在的嵌套目录问题
if [ -d "mp4v2/mp4v2-master" ]; then
    echo "发现嵌套的mp4v2-master目录，正在清理..."
    # 备份当前内容
    BACKUP_DIR="mp4v2_backup_$(date +%Y%m%d_%H%M%S)"
    echo "将当前mp4v2目录备份为$BACKUP_DIR"
    mv mp4v2 $BACKUP_DIR
    echo "清理完成！"
fi

# 尝试使用git下载
if command -v git &> /dev/null; then
echo "尝试使用git克隆仓库..."
# 确保没有现有的mp4v2目录
if [ -d "mp4v2" ]; then
    rm -rf mp4v2
    echo "已删除旧的mp4v2目录"
fi
git clone https://github.com/mp4v2/mp4v2.git
if [ $? -eq 0 ]; then
    DOWNLOAD_SUCCESS=1
    echo "git克隆成功！"
else
    echo "git克隆失败！"
fi
fi

# 如果git下载失败，尝试使用wget下载压缩包
if [ $DOWNLOAD_SUCCESS -ne 1 ]; then
    if command -v wget &> /dev/null; then
echo "尝试使用wget下载..."
wget https://github.com/mp4v2/mp4v2/archive/refs/heads/master.zip -O mp4v2-master.zip
if [ $? -eq 0 ] && command -v unzip &> /dev/null; then
    echo "下载成功，正在解压..."
    # 确保没有现有的mp4v2目录
    if [ -d "mp4v2" ]; then
        rm -rf mp4v2
        echo "已删除旧的mp4v2目录"
    fi
    # 确保没有现有的mp4v2-master目录
    if [ -d "mp4v2-master" ]; then
        rm -rf mp4v2-master
        echo "已删除旧的mp4v2-master目录"
    fi
    unzip mp4v2-master.zip
if [ $? -eq 0 ]; then
    echo "解压成功，重命名目录..."
    mv mp4v2-master mp4v2
    if [ $? -eq 0 ]; then
        DOWNLOAD_SUCCESS=1
        echo "wget下载并解压成功！"
    else
        echo "重命名目录失败！"
    fi
else
    echo "解压失败！"
fi
else
    echo "wget或unzip命令不可用！"
fi
fi
fi

# 检查是否成功下载
if [ $DOWNLOAD_SUCCESS -ne 1 ]; then
    echo "错误：无法下载mp4v2源码！"
    echo "请手动下载mp4v2源码并放到$DOWNLOAD_DIR/mp4v2目录中。"
    echo "下载地址：https://github.com/mp4v2/mp4v2.git"
    exit 1
fi

# 进入mp4v2目录
cd mp4v2 || {
    echo "错误：无法进入mp4v2目录！目录不存在。"
    echo "请检查$DOWNLOAD_DIR目录下是否有mp4v2子目录。"
    exit 1
}

# 配置和编译
 echo "正在配置和编译mp4v2库..."

# 检查C++编译器是否可用
check_cpp_compiler() {
    if command -v g++ &> /dev/null; then
        echo "找到C++编译器: g++"
        return 0
    elif command -v c++ &> /dev/null; then
        echo "找到C++编译器: c++"
        return 0
    elif command -v clang++ &> /dev/null; then
        echo "找到C++编译器: clang++"
        return 0
    elif command -v cl.exe &> /dev/null; then
        echo "找到C++编译器: cl.exe"
        return 0
    else
        echo "未找到C++编译器！mp4v2库需要C++编译器来构建。"
        return 1
    fi
}

# 检测操作系统类型
if [[ "$(uname)" == *"MINGW"* ]] || [[ "$(uname)" == *"CYGWIN"* ]]; then
    echo "检测到Windows环境(MINGW/CYGWIN)..."
    echo "mp4v2库在Windows环境下有以下构建选项："
    echo "1. 使用Visual Studio构建（推荐）："
    echo "   - 打开 vstudio9.0/mp4v2.sln 文件（兼容Visual Studio 2008及更高版本）"
    echo "   - 将 libmp4v2 项目设置为静态库（如果需要）"
    echo "   - 构建整个解决方案"
    echo "2. 尝试使用MSYS2或MinGW的autotools构建："
    
    # 检查是否存在configure.ac，如果存在则使用autoreconf生成configure脚本
    if [ -f "configure.ac" ]; then
    echo "\n尝试使用autotools构建..."
    # 检查C++编译器是否可用
    if ! check_cpp_compiler; then
        echo "请安装C++编译器后再试，或使用Visual Studio构建（推荐）。"
        echo "在MSYS2中安装编译器: pacman -S mingw-w64-x86_64-gcc"
        echo "在MinGW中安装编译器: 从MinGW安装管理器中选择g++包"
    else
    # 首先尝试使用autoreconf
    if command -v autoreconf &> /dev/null; then
        autoreconf -i -f
        if [ $? -eq 0 ]; then
            echo "autoreconf成功，运行configure..."
            ./configure --prefix="$(pwd)/../install" --enable-shared=no --enable-static=yes
            if [ $? -eq 0 ]; then
                echo "configure成功，开始编译..."
                make && make install
                if [ $? -eq 0 ]; then
                    echo "编译和安装成功！"
                    exit 0
                fi
            fi
        fi
    fi
    fi
    fi
    fi
    
    # 如果自动构建失败，提供手动构建说明
    echo "\n自动构建失败，请尝试手动构建："
    echo "方法1：使用Visual Studio（推荐）"
    echo "   1. 打开 vstudio9.0/mp4v2.sln 文件"
    echo "   2. 选择 libmp4v2 项目"
    echo "   3. 在项目属性中设置输出为静态库"
    echo "   4. 构建解决方案"
    echo "方法2：使用MSYS2/MinGW的gcc编译器"
    echo "   1. 确保已安装autotools工具链"
    echo "   2. 运行: autoreconf -i -f"
    echo "   3. 运行: ./configure --prefix=$(pwd)/../install --enable-shared=no --enable-static=yes"
    echo "   4. 运行: make && make install"
    
    # 创建一个简单的README.build文件，包含手动构建说明
    echo "mp4v2库在Windows下的构建指南\n\n方法1：使用Visual Studio（推荐）\n1. 打开 vstudio9.0/mp4v2.sln 文件（兼容VS2008及更高版本）\n2. 将 libmp4v2 项目设置为静态库\n3. 构建整个解决方案\n\n方法2：使用MSYS2/MinGW的autotools构建\n1. 安装autotools工具链：pacman -S autoconf automake libtool\n2. 运行: autoreconf -i -f\n3. 运行: ./configure --prefix=$(pwd)/../install --enable-shared=no --enable-static=yes\n4. 运行: make && make install" > $(pwd)/../install_guide.txt
    echo "\n详细构建指南已保存至: $(pwd)/../install_guide.txt"
    
else
    # Linux/Unix环境下的构建逻辑
    # 检查是否存在configure.ac，如果存在则使用autoreconf生成configure脚本
    if [ -f "configure.ac" ]; then
    echo "找到configure.ac，尝试使用autoreconf生成configure脚本..."
    # 检查C++编译器是否可用
    if ! check_cpp_compiler; then
        echo "未找到C++编译器！请安装后再试。"
        echo "在Ubuntu/Debian上安装: sudo apt-get install g++"
        echo "在CentOS/RHEL上安装: sudo yum install gcc-c++"
    else
    # 首先尝试使用autoreconf
    if command -v autoreconf &> /dev/null; then
        autoreconf -i -f
        if [ $? -eq 0 ]; then
            echo "autoreconf成功，运行configure..."
            ./configure --prefix="$(pwd)/../install" --enable-shared=no --enable-static=yes
            if [ $? -eq 0 ]; then
                echo "configure成功，开始编译..."
                make && make install
                if [ $? -eq 0 ]; then
                    echo "编译和安装成功！"
                    exit 0
                fi
            fi
        fi
    fi
    fi

    # 如果前面的方法失败，提供手动构建说明
    echo "\n自动构建失败，请尝试以下命令手动构建："
    echo "1. 安装必要工具和C++编译器: sudo apt-get install autoconf automake libtool g++"
    echo "2. 生成configure: autoreconf -i -f"
    echo "3. 配置: ./configure --prefix=$(pwd)/../install --enable-shared=no --enable-static=yes"
    echo "4. 编译: make"
    echo "5. 安装: make install"
fi

# 检查是否安装成功
if [ -f "$(pwd)/../install/include/mp4v2/mp4v2.h" ] && [ -f "$(pwd)/../install/lib/libmp4v2.a" ]; then
    echo "mp4v2库编译和安装成功!"
    echo "头文件位于: $(pwd)/../install/include/mp4v2/"
    echo "静态库位于: $(pwd)/../install/lib/"
else
    echo "mp4v2库编译或安装失败，请检查错误信息。"
    exit 1
fi

cd ../../
echo "mp4v2源码下载和编译完成！"